home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGMISC / FORTRAN1.LZH / GETXY.FOR < prev    next >
Text File  |  1988-02-08  |  3KB  |  122 lines

  1.       SUBROUTINE GETXY (NWRITE, IX, IY)
  2. C*
  3. C*                  *******************************
  4. C*                  *******************************
  5. C*                  **                           **
  6. C*                  **          GETXY            **
  7. C*                  **                           **
  8. C*                  *******************************
  9. C*                  *******************************
  10. C*
  11. C*     SUBPROGRAM :
  12. C*          GET X,Y LOCATION
  13. C*
  14. C*     AUTHOR :
  15. C*          ART RAGOSTA
  16. C*          MS 207-5
  17. C*          AMES RESEARCH CENTER
  18. C*          MOFFETT FIELD, CALIF  94035
  19. C*          (415)694-5578
  20. C*
  21. C*     PURPOSE :
  22. C*          TO RETRIEVE THE X AND Y LOCATION OF THE CURSOR.
  23. C*
  24. C*     METHODOLOGY :
  25. C*          USE VT-100 CONTROL SEQUENCE.
  26. C*
  27. C*     INPUT ARGUMENTS :
  28. C*          NWRITE  - THE FORTRAN LOGICAL UNIT NUMBER ASSIGNED TO THE SCREEN.
  29. C*
  30. C*     OUTPUT ARGUMENTS :
  31. C*          IX  - THE COLUMN IN WHICH THE CURSOR RESIDES.
  32. C*          IY  - THE ROW IN WHICH THE CURSOR RESIDES.
  33. C*                NOTE : (1,1) IS THE UPPER, LEFT-HAND CORNER OF THE SCREEN.
  34. C*
  35. C*     INTERNAL WORK AREAS :
  36. C*          NONE
  37. C*
  38. C*     COMMON BLOCKS :
  39. C*          NONE
  40. C*
  41. C*     FILE REFERENCES :
  42. C*          NREAD, NWRITE
  43. C*
  44. C*     DATA BASE ACCESS :
  45. C*          NONE
  46. C*
  47. C*     SUBPROGRAM REFERENCES :
  48. C*          NONE
  49. C*
  50. C*     ERROR PROCESSING :
  51. C*          IF THE TERMINAL DOES NOT MAKE AN INTELLIGIBLE RESPONSE TO THE
  52. C*          QUERY, IX AND IY ARE SET TO ZERO; THIS MAY HAPPEN WHEN A USER
  53. C*          TRIES TO USE THESE ROUTINES ON A NON-VT100 TYPE TERMINAL.
  54. C*
  55. C*     TRANSPORTABILITY LIMITATIONS :
  56. C*          WORKS ONLY ON VT-100 OR COMPATIBLE TERMINALS.
  57. C*          USES THE NON-STANDARD $ FORMAT DESCRIPTIOR.
  58. C*
  59. C*     ASSUMPTIONS AND RESTRICTIONS :
  60. C*          THE TERMINAL MUST BE ASSIGNED TO 'SYS$INPUT'.
  61. C*
  62. C*     LANGUAGE AND COMPILER :
  63. C*          ANSI FORTRAN 77
  64. C*
  65. C*     VERSION AND DATE :
  66. C*          VERSION I.0     30-JAN-85
  67. C*
  68. C*     CHANGE HISTORY :
  69. C*          30-JAN-85    INITIAL VERSION
  70. C*
  71. C***********************************************************************
  72. C*
  73.       BYTE INBUFF(10)
  74.       CHARACTER *10 STRING
  75.       CHARACTER *1 ESC
  76.       DATA ESC/27/
  77.       DATA IONIT/0/
  78.       SAVE IONIT
  79.       EQUIVALENCE (INBUFF(1),STRING)
  80.       DATA NBUFF/10/
  81. C
  82.       IX  = 0
  83.       IY  = 0
  84.       IF ( IONIT .EQ. 0 ) THEN
  85.          IONIT = 1
  86.          CALL IOINIT
  87.       ENDIF
  88. C
  89. C --- QUERY TERMINAL
  90. C
  91.       WRITE ( NWRITE, 900 ) ESC
  92. C
  93. C --- DO ASYNCHRONOUS READ OF TERMINAL'S RESPONSE
  94. C
  95. C --- THE FOLLOWING READ IS REQUIRED BECAUSE VMS CONSIDERS AN ESCAPE AS AN
  96. C ---  END-OF-LINE CHARACTER
  97. C
  98.       READ ( 5, 910 ) STRING
  99.       CALL INCHAR ( INBUFF, NBUFF, .FALSE., 1, NC, IERR )
  100.       IF ((IERR .EQ. -1) .OR. (IERR .EQ. -3)) RETURN
  101. C
  102. C --- DECODE THE TERMINAL RESPONSE ( <ESC>[ix;iyR )
  103. C
  104.       I = INDEX ( STRING, '[' ) + 1
  105.       J = INDEX(STRING,';') - 1
  106.       IF (J .LT. I) RETURN
  107.       READ ( STRING(I:J), 920 ) IY
  108.       I = J + 2
  109.       J = INDEX(STRING,'R') - 1
  110.       IF (J .LT. I) RETURN
  111.       READ (STRING(I:J),920) IX
  112.       IF ((IX .LE. 0) .OR. (IX .GE. 133)) IX = 1
  113.       IF ((IY .LE. 1) .OR. (IY .GE. 25)) IY = 2
  114.       RETURN
  115. 900   FORMAT ('+',A1,'[6n',$ )
  116. 910   FORMAT ( A10 )
  117. 920   FORMAT ( I<J-I+1> )
  118.       END
  119. C
  120. C---END GETXY
  121. C
  122.